#include "AppLayer.h"
#include "ButtonLayer.h"
#include "WS2812_Control.h"


signed char repeat = 1;

#define DEBUG_PRINT_KEY_DEAL 1

//电源键处理
void PowerKey_LongStart_CB(void)
{
#if DEBUG_PRINT_KEY_DEAL
    printf("PowerKey_LongStart_CB\n");
#endif
    // 获取当前状态
    xcled_str.power_on = get_power();
    if(xcled_str.power_on == EFFECT_ON)
    {
        BootUp_Jump_ShutDown();
    }
    else
    {
        ShutDown_Jump_BootUp();
    }
}

void ModeKey_ShortStart_CB(void)
{
#if DEBUG_PRINT_KEY_DEAL
    printf("ModeKey_ShortStart_CB\n");
#endif
    if(get_power() == EFFECT_OFF)
    {
        return;
    }
    // 获取当前状态
    xcled_str.mode = get_effect();
    if(xcled_str.mode < EFFECT_COUNT)
    {
        xcled_str.mode++;
    }
    else
    {
        xcled_str.mode = 0;
    }
    setEffect(xcled_str.mode);
}

void H_Key_Short_CB(void)
{
#if DEBUG_PRINT_KEY_DEAL
    printf("H_Key_Short_CB\n");
#endif
    if(get_power() == EFFECT_OFF)
    {
        return;
    }
    xcled_str._H = get_hue();
    if(xcled_str._H < 254)
    {
        if(repeat == 1)
        {
            xcled_str._H += 1;
        }
        else
        {
            if(xcled_str._H > 1)
            {
                xcled_str._H -= 1;
            } 
        }
    }
    else
    {
        // xcled_str._H = 0;
    }
    setHue(xcled_str._H);
}

void H_Key_LongHold_CB(void)
{
#if DEBUG_PRINT_KEY_DEAL
    printf("H_Key_LongHold_CB\n");
#endif
    if(get_power() == EFFECT_OFF)
    {
        return;
    }
    xcled_str._H = get_hue();
    if(xcled_str._H < 245)
    {
        if(repeat == 1)
        {
            xcled_str._H += 10;
        }
        else
        {
            if(xcled_str._H > 10)
            {
                xcled_str._H -= 10;
            }
            else
            {
                xcled_str._H = 1;
            } 
        }
    }
    else
    {
        xcled_str._H = 255;
    }
    setHue(xcled_str._H);
}

void S_Key_Short_CB(void)
{
#if DEBUG_PRINT_KEY_DEAL
    printf("S_Key_Short_CB\n");
#endif
    if(get_power() == EFFECT_OFF)
    {
        return;
    }
    xcled_str._S = get_saturation();
    if(xcled_str._S < 254)
    {
        if(repeat == 1)
        {
            xcled_str._S += 1;
        }
        else
        {
            if(xcled_str._S > 1)
            {
                xcled_str._S -= 1;
            } 
        }
    }
    else
    {
        // xcled_str._S = 0;
    }
}

void S_Key_LongHold_CB(void)
{
#if DEBUG_PRINT_KEY_DEAL
    printf("S_Key_LongHold_CB\n");
#endif

    if(get_power() == EFFECT_OFF)
    {
        return;
    }
    xcled_str._S = get_saturation();
    if(xcled_str._S < 245)
    {
        if(repeat == 1)
        {
            xcled_str._S += 10;
        }
        else
        {
            if(xcled_str._S > 10)
            {
                xcled_str._S -= 10;
            } 
        }
    }
    else
    {
        xcled_str._S = 255;
    }
    setSaturation(xcled_str._S);
}

void V_Key_Short_CB(void)
{
#if DEBUG_PRINT_KEY_DEAL
    printf("V_Key_Short_CB\n");
#endif
    if(get_power() == EFFECT_OFF)
    {
        return;
    }
    xcled_str._V = get_brightness();
    if(xcled_str._V < 254)
    {
        if(repeat == 1)
        {
            xcled_str._V += 1;
        }
        else
        {
            if(xcled_str._V > 1)
            {
                xcled_str._V -= 1;
            } 
        }
    }
    else
    {
        // xcled_str._V = 0;
    }
}

void V_Key_LongHold_CB(void)
{
#if DEBUG_PRINT_KEY_DEAL
    printf("V_Key_LongHold_CB\n");
#endif

    if(get_power() == EFFECT_OFF)
    {
        return;
    }
    xcled_str._V = get_brightness();
    if(xcled_str._V < 245)
    {
        if(repeat == 1)
        {
            xcled_str._V += 10;
        }
        else
        {
            if(xcled_str._V > 10)
            {
                xcled_str._V -= 10;
            } 
        }
    }
    else
    {
        xcled_str._V = 255;
    }
    setBrightness(xcled_str._V);
}

void RST_Key_Short_CB(void)
{
#if DEBUG_PRINT_KEY_DEAL
    printf("RST_Key_Short_CB\n");
#endif
    if(get_power() == EFFECT_OFF)
    {
        return;
    }
    if(repeat == 1)
    {
        repeat = 0;
    }
    else
    {
        repeat = 1;
    }
}

void RST_Key_LongHold_CB(void)
{
#if DEBUG_PRINT_KEY_DEAL
    printf("RST_Key_LongHold_CB\n");
#endif
    
}